CloudFormationでVPC構成を記述して展開してみた
はじめに
かつまたです。リソース作成の検証の一環として、いくつかの方法でVPC、サブネット、IGW、EC2を利用した簡単な構成を作成してみました。
このブログではYAMLテンプレートを記述し、CloudFormationにアップロードすることでリソースを作成しました。
別の方法でのリソース作成については以下のブログに記載しました。
構成図は以下の通りです。
YAMLテンプレート作成
CloudFormationにアップロードする、YAMLテンプレートファイルをローカルで作成します。以下が今回作成したテンプレートです。
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
MyIP:
Type: String
Description: The IP address range that is allowed to access the instance
Default: '自分のIPアドレス'
Resources:
katsumataVPCCFn:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
katsumataEC2CFn:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: ami-00c79d83cf718a893 #自身のリージョンに存在するAMI IDを記入
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: '0'
SubnetId: !Ref katsumataSubnetCFn
GroupSet:
- !Ref katsumataSgCFn
katsumataSgCFn:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow HTTP
VpcId: !Ref katsumataVPCCFn
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref MyIP
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: !Ref MyIP
katsumataSubnetCFn:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref katsumataVPCCFn
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
katsumataIGWCFn:
Type: AWS::EC2::InternetGateway
Properties: {}
katsumataVPCGatewayAttachmentCFn:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref katsumataVPCCFn
InternetGatewayId: !Ref katsumataIGWCFn
各パラメータ項目について説明を記述していきます。
項目 | 説明 |
---|---|
AWSTemplateFormatVersion | テンプレートのバージョンを指定。 |
MyIP | 特定のIPアドレス範囲からのアクセスを許可するためのパラメータ。デフォルト値は「自分のIPアドレス」。 |
VPC | |
Type: AWS::EC2::VPC | VPCリソースの種類を指定。 |
CidrBlock: 10.0.0.0/16 | VPCのCIDRブロックを指定。 |
EnableDnsSupport: true | DNSサポートを有効。 |
EnableDnsHostnames: true | DNSホスト名を有効。 |
EC2 | |
Type: AWS::EC2::Instance | EC2インスタンスリソースの種類を指定。 |
InstanceType: t2.micro | インスタンスタイプを指定。 |
ImageId: ami-00c79d83cf718a893 | 使用するAMIのIDを指定。 |
NetworkInterfaces | ネットワークインターフェースの設定を定義。 |
AssociatePublicIpAddress: true | パブリックIPアドレスを割り当て。 |
DeviceIndex: '0' | ネットワークインターフェースのデバイスインデックスを指定。 |
SubnetId: !Ref katsumataSubnetCFn | サブネットのIDを参照。 |
GroupSet: !Ref katsumataSgCFn | セキュリティグループのIDを参照。 |
セキュリティグループ | |
Type: AWS::EC2::SecurityGroup | セキュリティグループリソースの種類を指定。 |
GroupDescription: Allow HTTP | セキュリティグループの説明を指定。 |
VpcId: !Ref katsumataVPCCFn | VPCのIDを参照。 |
SecurityGroupIngress | インバウンドルールを定義。 |
IpProtocol: tcp | 許可するプロトコルを指定。 |
FromPort: 80 | 許可するポート(HTTP)の開始番号を指定。 |
ToPort: 80 | 許可するポート(HTTP)の終了番号を指定。 |
CidrIp: !Ref MyIP | 許可するIPアドレス範囲を参照(パラメータ MyIP から取得)。 |
IpProtocol: tcp | 許可するプロトコルを指定。 |
FromPort: 22 | 許可するポート(SSH)の開始番号を指定。 |
ToPort: 22 | 許可するポート(SSH)の終了番号を指定。 |
CidrIp: !Ref MyIP | 許可するIPアドレス範囲を参照(パラメータ MyIP から取得)。 |
サブネット | |
Type: AWS::EC2::Subnet | サブネットリソースの種類を指定。 |
CidrBlock: 10.0.1.0/24 | サブネットのCIDRブロックを指定。 |
MapPublicIpOnLaunch: true | インスタンス起動時にパブリックIPを割り当てるかどうかを指定。 |
インターネットゲートウェイ | |
Type: AWS::EC2::InternetGateway | インターネットゲートウェイリソースの種類を指定。 |
Properties: {} | 空のプロパティブロック(特に設定が必要ないため)。 |
VPCにインターネットゲートウェイをアタッチ | |
Type: AWS::EC2::VPCGatewayAttachment | VPCゲートウェイアタッチメントリソースの種類を指定。 |
VpcId: !Ref katsumataVPCCFn | VPCのIDを参照。 |
InternetGatewayId: !Ref katsumataIGWCFn | インターネットゲートウェイのIDを参照。 |
スタック作成
1.CloudFormationコンソールに移動し、「スタック」→「スタックの作成(新しいリソースを作成)」を押下する。
2.「テンプレートの指定」→「テンプレートファイルのアップロード」を選択し、事前に作成したYAMLファイルをアップロードします。
3.スタックの名前を入力します
4.「スタックのオプションを設定」では必要に応じてタグやその他のオプションを設定します。今回はデフォルトのままで実行しました。
5.設定内容を確認し、スタックを作成します。
作成リソースの確認
マネジメントコンソール上でYAMLテンプレートで記述したサービスに移動し、作成できていることを確認します。(画像は作成したVPC)
スタック削除
コストを抑えるために作成したスタックを削除します。
1.CloudFormationの「スタック」で作成したスタックを選択します。
2.「削除」を選択し、スタックの削除を行います。
おわりに
今回、CloudFormationを利用して、マネジメントコンソールからシンプルな方法でリソース作成を行いました。すでにテンプレートがある状態のリソース作成としては、視覚的にも実施しやすい方法であると感じました。
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。